package fichiers;

import java.io.File;
import java.util.*;
import support.*;


public class GestionnaireDeDossier extends Observable{
    
    private ArrayList fichiersAlways;
    private ArrayList fichiersNever;
    
    public GestionnaireDeDossier() {
        
        fichiersAlways=new ArrayList();
        fichiersNever= new ArrayList();
    }
    
    public void ajouterFichiersAlways(Dossier nouveau){
        
        this.fichiersAlways.add(nouveau);
        this.setChanged();
        this.notifyObservers(nouveau);
        this.clearChanged();
        System.out.println("Ajout always "+nouveau);
    }
    
    public void supprimerFichiersAlways(Dossier ancien){
        
        this.fichiersAlways.remove(ancien);
        this.setChanged();
        this.notifyObservers(ancien);
        this.clearChanged();
        System.out.println("Suppression always "+ancien);
    }
    
    public void ajouterFichiersNever(Dossier nouveau){
        
        this.fichiersNever.add(nouveau);
        System.out.println("Ajout never "+nouveau);
    }
    
    public void supprimerFichiersNever(Dossier ancien){
        
        this.fichiersNever.remove(ancien);
        System.out.println("Suppression never "+ancien);
    }
    
    public boolean estUnSousFichiersAlways(Dossier d){
        
        String pathd=d.getFichierCourant().getAbsolutePath();
        
        Iterator it=this.fichiersAlways.iterator();
        while(it.hasNext()){
            
            Dossier suiv=(Dossier)it.next();
            if(pathd.startsWith(suiv.getFichierCourant().getAbsolutePath())){
                
                return true;
            }
        }
        
        return false;
    }
    
    public boolean estUnFichierAlways(Dossier d){
        
        String pathd=d.getFichierCourant().getAbsolutePath();
        
        Iterator it=this.fichiersAlways.iterator();
        while(it.hasNext()){
            
            Dossier suiv=(Dossier)it.next();
            if(pathd.equalsIgnoreCase(suiv.getFichierCourant().getAbsolutePath())){
                
                return true;
            }
        }
        
        return false;
        
    }
    
    public void supprimerSousFichierNever(Dossier d){
        
        ArrayList temp=new ArrayList(this.fichiersNever);
        Iterator it=temp.iterator();
        while(it.hasNext()){
            
            Dossier suiv=(Dossier)it.next();
            if(suiv.getFichierCourant().getAbsolutePath().startsWith(d.getFichierCourant().getAbsolutePath())){
                
                this.supprimerFichiersNever(suiv);
            }
        }
    }
    
    public void supprimerSousFichierAlways(Dossier d){
        
        ArrayList temp=new ArrayList(this.fichiersAlways);
        Iterator it=temp.iterator();
        while(it.hasNext()){
            
            Dossier suiv=(Dossier)it.next();
            if(suiv.getFichierCourant().getAbsolutePath().startsWith(d.getFichierCourant().getAbsolutePath())){
                
                //RacinePhoto.getRacine().supprimerSousElement(suiv);
                this.supprimerFichiersAlways(suiv);
                
            }
            
        }
    }
    
    public void recupererSousFichiersAlways(Dossier d){
        
        Iterator it=this.fichiersAlways.iterator();
        while(it.hasNext()){
            
            Dossier suiv=(Dossier)it.next();
            if(suiv.getFichierCourant().getAbsolutePath().startsWith(d.getFichierCourant().getAbsolutePath())){
                
                Dossier temp=(Dossier) RacinePicasial.getRacine().getElement(suiv.getFichierCourant().getAbsolutePath());
                Dossier pere=temp.getPere();
                pere.supprimerSousElement(temp);
                Dossier nouv=new Dossier(pere,suiv.getFichierCourant(),new String(suiv.toString()));
                pere.ajouterSousElement(nouv);
                nouv.creerCopieRecursive(suiv,false);
                
            }
        }
    }
    
    public void mettreAJour(Dossier courant){
        
        boolean estUnSousFichiersAlways=this.estUnSousFichiersAlways(courant);
        boolean verif=courant.getVerification();
        boolean estUnFichierAlways=estUnFichierAlways(courant);
        
        if(!verif && estUnFichierAlways ){
            
            System.out.println("Cas 1");
            this.supprimerSousFichierNever(courant);
            this.supprimerSousFichierAlways(courant);
            
        } else if(!verif && estUnSousFichiersAlways){
            
            System.out.println("Cas 2");
            this.supprimerSousFichierNever(courant);
            this.supprimerSousFichierAlways(courant);
            this.ajouterFichiersNever(courant);
            
            
        } else if(verif && estUnSousFichiersAlways){
            System.out.println("Cas 3");
            /*String path=courant.getPere().getFichierCourant().getAbsolutePath();
            Dossier pere=(Dossier) RacinePhoto.getRacine().getElement(path);
            Dossier temp=new Dossier(RacinePhoto.getRacine(),courant.getFichierCourant(),new String(courant.toString()));
            int index=pere.getIndex(temp);
            pere.ajouterSousElement(temp,index);*/
            this.supprimerFichiersNever(courant);
            
        } else if(verif && !estUnSousFichiersAlways){
            
            System.out.println("Cas 4");
            Dossier copie=new Dossier(RacinePicasial.getRacine(),courant.getFichierCourant(),new String(courant.toString()));
            int index=RacinePicasial.getRacine().getIndex(copie);
            RacinePicasial.getRacine().ajouterSousElement(copie,index);
            copie.creerCopieRecursive(courant,true);
           // this.recupererSousFichiersAlways(temp);
            this.supprimerSousFichierNever(courant);
            this.supprimerSousFichierAlways(courant);
            this.ajouterFichiersAlways(copie);
        }
        
    }
    
    
    
}
